#ifndef SOUNDFILE_H
#define SOUNDFILE_H

#include <QTreeWidgetItem>
#include <QVector>
#include "revoice.h"
#include <QFile>
#include <QTableWidget>
#include <QPlainTextEdit>
#include <QSettings>
#include "ui_mainwindow.h"

class SoundFile : public QObject, public QTreeWidgetItem
{
    Ui::MainWindow *ui;

    Q_OBJECT

public:
    SoundFile(QString parentPath, QTreeWidgetItem* parentFolder, Ui::MainWindow *p_ui);

    bool loadInfo(QFile* infoFile);
    void makeCopy(SoundFile *copy);

    QTreeWidgetItem* getParentFolder() { return parentFolder; }

    QString getFileType();

    QString getCommentary() { return commentary; }
    QString getType();
    QString getLength() { return length; }
    QString getName();
    QString getPath() { return path; }
    QString getPathToOrig() { return path + "/original." + filename.right(3); }  // Путь к оригинальному файлу для работы с ним
    QStringList getTags();
    QString getTranslateText() { return textTranslate; }

    int getRevoicesCount() { return revoices.count(); }

    bool editIsFinished() { return editFinished; }
    bool hasTranslate()   { return hasTextTranslate; }
    bool hasRevoices()    { return hasRevoice; }

    Revoice* getRevoice(int index)    { return revoices.at(index); }
    QVector <Revoice *> getRevoices() { return revoices; }

    // set-функции
    void addTag(QString tag);
    void clearTags()         { tags.clear(); if( pToOriginal ) pToOriginal->clearTags();}

    void updateToolTip();

    void setTranslateText(QString text);

    void addRevoice(QString author, QString length);

    void setRevoiceIconVisible( bool visible );
    void setTextIconVisible   ( bool visible );
    void setCommentary        (QString commentary) { this->commentary = commentary; if( pToOriginal ) pToOriginal->setCommentary(commentary);}

    void deleteRevoice (int index);

    SoundFile* pToOriginal; // Если данный объект копия, то тут хранится указатель на оригинальный объект

protected:
    QVector <Revoice*> revoices;

    QString commentary;
    QString textTranslate;
    bool hasRevoice;
    bool hasTextTranslate;

    // Прочие данные
    QString type;       // Тип объекта
    QString length;     // Длина файла строкой  (Берется из info.dat дабы не вычислять и тем самым добиться чуть большего быстродействия)
    QString filename;   // Имя файла
    QString filetype;   // Расширение файла
    QString path;       // путь к папке с данными файла (Путь к оригинальному файлу = path + "/original.wav"
    QStringList tags;   // Теги
    bool editFinished;  // Пометка: редактирование завершено
    bool isHasSave;       // Есть сохранение?

    QTreeWidgetItem* parentFolder;
public slots:
    void showRevoicesInTable(QTreeWidgetItem *item);
};

#endif // SOUNDFILE_H
